package net.fpeg.kotlin.msa.wordbase.controller

import net.fpeg.kotlin.msa.wordbase.dto.WordTagDto
import net.fpeg.kotlin.msa.wordbase.dto.WordTagIndexDto
import net.fpeg.kotlin.msa.wordbase.dto.WordTagSelectDto
import net.fpeg.kotlin.msa.wordbase.dto.WordTagSelectIndexDto
import net.fpeg.kotlin.msa.wordbase.service.WordTagService
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.http.HttpStatus
import org.springframework.web.bind.annotation.*


@RestController
@RequestMapping("/wordTag")
class WordTagController {
    @Autowired
    lateinit var wordTagService: WordTagService

    @GetMapping
    fun fetch(
            @RequestHeader("USER_ID") uid: Long
    ) = WordTagSelectDto(wordTagService.find(uid).map { WordTagSelectIndexDto(it.value) })

    @GetMapping("/word/{wordValue}")
    fun fetch(
            @RequestHeader("USER_ID") uid: Long,
            @PathVariable("wordValue") wordValue: String
    ) = WordTagDto(wordTagService.find(uid, wordValue).map { WordTagIndexDto(it.value) })

    @PostMapping("/{wordTagValue}")
    @ResponseStatus(HttpStatus.CREATED)
    fun add(
            @RequestHeader("USER_ID") id: Long,
            @PathVariable("wordTagValue") wordTagValue: String
    ) = wordTagService.add(id, wordTagValue).id

    @PutMapping("/{oldValue}/{newValue}")
    @ResponseStatus(HttpStatus.NO_CONTENT)
    fun edit(
            @RequestHeader("USER_ID") id: Long,
            @PathVariable("oldValue") oldValue: String,
            @PathVariable("newValue") newValue: String
    ) = wordTagService.edit(id, oldValue, newValue).id


    @DeleteMapping("/{tagValue}")
    @ResponseStatus(HttpStatus.NO_CONTENT)
    fun remove(
            @RequestHeader("USER_ID") id: Long,
            @PathVariable("tagValue") tagValue: String
    ) {
        wordTagService.remove(id, tagValue)
    }


}